package vista;


import java.net.URL;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import javax.swing.JOptionPane;

import controlador.CdGenerico;
import controlador.CdProveedores;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import entidades.Generico;
import entidades.Productos;
import entidades.Proveedor;
import entidades.iOperaciones;

public class ClCtrGenerico implements Initializable, iOperaciones {
	@FXML
	TextField txtCodigoGene;
	@FXML
	TextField txtNombreGene;
	@FXML
	TextField txtExistenciaGene;
	@FXML
	TextField txtPrecioGene;
	@FXML
	TextField txtFormula;
	@FXML
	Button btnGuardarGene;
	@FXML
	Button btnEliminarGene;
	@FXML
	TableView <Object>tvProductosGene;
	@FXML
	TableColumn tcCodigoGene;
	@FXML
	TableColumn tcNombreGene;
	@FXML
	TableColumn tcExistenciaGene;
	@FXML
	TableColumn tcPrecioGene;
	@FXML
	TableColumn tcFormula;
	@FXML
	TableColumn tcProveedor;
	@FXML
	ComboBox cmbProveedorG;
	
	@FXML 
	Tab tabProductosGral;
	
	@FXML 
	Tab tabMedicamentosGene;
	
	
	private vista.MainApp mainApp;
	private boolean esnuevo=true;
	private Generico generico;
	private CdGenerico datosGenerico=new CdGenerico();
	List<Object>lista=new ArrayList<Object>();
	
	private CdProveedores datosProveedor = new CdProveedores();
	List<Object>listaProveedores=new ArrayList<Object>();
	
	
	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {
		// TODO Auto-generated method stub
		llenarTvGenerico();
		llenarCombo();
		btnGuardarGene.setOnAction(new btnGuardarGene_Click());
		btnEliminarGene.setOnAction(new btnEliminarGene_Click());
		tvProductosGene.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>(){

			@Override
			public void changed(ObservableValue<? extends Object> observable,
					Object oldValue, Object newValue) {
				// TODO Auto-generated method stub
				datosProducto(newValue);
				
			}
			
		});
	}
	
	private void datosProducto(Object seleccionado){
		generico=(Generico) seleccionado;
		if(generico!=null){
		esnuevo=false;
		txtCodigoGene.setText(generico.getCodigo());
		txtNombreGene.setText(generico.getNombre());
		txtExistenciaGene.setText(Integer.toString(generico.getExistencia()));
		txtPrecioGene.setText(Float.toString(generico.getPrecio()));
		txtFormula.setText(generico.getFormula());	
		cmbProveedorG.setValue((Proveedor)generico.getProveedor());
		
		}
		
	}
	
	public void limpiarCajasGenerico(){
		esnuevo=true;
		txtCodigoGene.setText("");
		txtNombreGene.setText("");
		txtExistenciaGene.setText("");
		txtPrecioGene.setText("");
		txtFormula.setText("");
	}

	public void llenarCombo(){
		try {
			listaProveedores=datosProveedor.listar();
		} catch (ClassNotFoundException | InstantiationException
				| IllegalAccessException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		ObservableList<Object>listaObs=FXCollections.observableArrayList(listaProveedores);
		cmbProveedorG.getItems().addAll(listaObs);
		
		
	}
	
	public void llenarTvGenerico(){
		List<Object>lista=new ArrayList<Object>();
		try {
			lista=listar();
		} catch (ClassNotFoundException | InstantiationException
				| IllegalAccessException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		ObservableList<Object>listaObs=FXCollections.observableArrayList(lista);
		tcCodigoGene.setCellValueFactory(new PropertyValueFactory<Generico,Integer>("codigo"));
		tcNombreGene.setCellValueFactory(new PropertyValueFactory<Generico,String>("nombre"));
		tcExistenciaGene.setCellValueFactory(new PropertyValueFactory<Generico,Integer>("existencia"));
		tcPrecioGene.setCellValueFactory(new PropertyValueFactory<Generico,Float>("precio"));
		tcFormula.setCellValueFactory(new PropertyValueFactory<Generico,String>("formula"));
		tcProveedor.setCellValueFactory(new PropertyValueFactory<Generico,Proveedor>("proveedor"));
		tvProductosGene.setItems(listaObs);
		
	}
	
	private class btnGuardarGene_Click implements EventHandler<ActionEvent>
	{
			@Override
		public void handle(ActionEvent arg0) {
				
				if(esnuevo==true){
					generico=new Generico(txtCodigoGene.getText(),txtNombreGene.getText(),(Integer.parseInt(txtExistenciaGene.getText())),(Integer.parseInt(txtPrecioGene.getText())),txtFormula.getText(),(Proveedor)cmbProveedorG.getValue());					
					try{
						
						if(agregar(generico)){
							JOptionPane.showMessageDialog(null, "registro existoso");
							
							llenarTvGenerico();
							limpiarCajasGenerico();
							
						}
						else{
							System.out.println("registro fallido");
						}	
						
					}
					catch(Exception e){
						System.out.print(e);
						esnuevo=false;
					}
					
				}
				else{
					generico.setCodigo(txtCodigoGene.getText());
					generico.setNombre(txtNombreGene.getText());
					generico.setExistencia(Integer.parseInt(txtExistenciaGene.getText()));
					generico.setPrecio(Float.parseFloat(txtPrecioGene.getText()));
					generico.setFormula(txtFormula.getText());
					
					
					try{
						
						if(actualizar(generico)){
							System.out.println("Modificacion exitosa");
							llenarTvGenerico();
							limpiarCajasGenerico();
						}
						else{
							System.out.println("Modificacion fallida");
						}	
						
					}
					catch(Exception e){
						System.out.print(e);
						esnuevo=false;
					}
				}
			}
			
	
	}
	private class btnEliminarGene_Click implements EventHandler<ActionEvent>{

		@Override
		public void handle(ActionEvent arg0) {
			// TODO Auto-generated method stub
				
			generico.setCodigo(txtCodigoGene.getText());
			generico.setNombre(txtNombreGene.getText());
			generico.setExistencia(Integer.parseInt(txtExistenciaGene.getText()));
			generico.setPrecio(Float.parseFloat(txtPrecioGene.getText()));
			generico.setFormula(txtFormula.getText());
			try{
				
				if(eliminar(generico)){
					System.out.println("cliente eliminado exitosamente");
					llenarTvGenerico();
					limpiarCajasGenerico();
				}
				else{
					System.out.println("operacin  fallida");
				}	
				
			}
			catch(Exception e){
				System.out.print(e);
				esnuevo=false;
			}	
		}
			
		}
	public void setMainApp(vista.MainApp mainApp){
		this.mainApp=mainApp;
	}

	@Override
	public boolean agregar(Object nuevo) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		//return datosProducto.agregar(nuevo);
		return datosGenerico.agregar(nuevo);
	}

	@Override
	public boolean actualizar(Object modificado) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosGenerico.actualizar(modificado);
	}

	@Override
	public boolean eliminar(Object eliminado) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosGenerico.eliminar(eliminado);
	}

	@Override
	public List<Object> listar() throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosGenerico.listar();
	}

}

